package Both;

import java.util.HashMap;

public abstract class Services {

    /**
     * Verifie l'egalite de deux HasMap. Le type des cles et le type des
     * associes DOIVENT IMPERATIVEMENT surcharger la methode equals
     * 
     * @param arg0
     *            HashMap comparant
     * @param arg1
     *            HashMap compare
     * @return true si les HashMap sont egaux, false sinon
     */
    public static boolean equalsHasMap(HashMap arg0, HashMap arg1) {
        // V�rifier la validite des arguments
        //
        if ((arg0 == null && arg1 != null) || (arg0 != null && arg1 == null))
            return false;
        if (arg0 == null && arg1 == null)
            return true;

        // S'assurer que les tailles soient egales
        //
        if (arg0.size() != arg1.size())
            return false;

        // S'assurer que les cles soient identiques
        //
        if (!arg0.keySet().equals(arg1.keySet()))
            return false;

        // S'assurer que la valeur des associes soient identique
        //
        for (Object key : arg0.keySet()) {
            if (arg0.get(key) == null && arg1.get(key) == null)
                continue;
            if (arg0.get(key).getClass().getName().equals(
                    HashMap.class.getName())) {
                if (!equalsHasMap((HashMap) arg0.get(key), (HashMap) arg1
                        .get(key)))
                    return false;
            } else if (!arg0.get(key).equals(arg1.get(key)))
                return false;
        }

        // Retourner true : aucune difference detectee
        //
        return true;
    }
}
